package com.shy.userservice.controller;


import com.shy.commonutils.result.R;
import com.shy.userservice.entity.User;
import com.shy.userservice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

/**
 * @author RinMi
 * @since 2022-11-23
 */
@RestController
@CrossOrigin
@RequestMapping("/userservice/user")
public class UserController {

    @Autowired
    private UserService userService;

    /*
     *  登录部分：1、手机验证码登录    2、账号密码登录
     */

    /*
     * 手机验证码登录：发送验证码、匹配登录信息（手机号、验证码）
     */

    //发送验证码
    @GetMapping("sendCode/{phone}")
    public R sendCode(@PathVariable String phone) {
        if (StringUtils.isEmpty(phone)) return R.error();
        //通过userService发送验证码
        if (userService.sendCode(phone)) {
            return R.ok();
        } else {
            return R.error();
        }
    }

    //手机号登录
    @PostMapping("phoneLogin/{phone}/{code}")
    public R phoneLogin(@PathVariable String phone, @PathVariable String code) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
            return R.error();
        }
        return userService.phoneLogin(phone, code);
    }

    /*
     *  账号密码登录：匹配登录信息（账号、密码）
     */

    @PostMapping("login/{phone}/{password}")
    public R login(@PathVariable String phone, @PathVariable String password) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(password)) {
            return R.error();
        }
        return userService.login(phone, password);
    }

    /*
     *  注册账号：1、手机号注册    2、账号密码注册
     */

    /*
     *  手机号注册：手机号 + 验证码
     */

    //手机号注册
    @PostMapping("phoneRegister/{phone}/{code}")
    public R phoneRegister(@PathVariable String phone, @PathVariable String code) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
            return R.error();
        }
        if (userService.phoneRegister(phone, code)) {
            return R.ok();
        } else {
            return R.error();
        }
    }


    /*
     *  账号密码登录：手机号 + 密码
     */
    @PostMapping("register/{phone}/{password}")
    public R register(@PathVariable String phone, @PathVariable String password) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(password)) {
            return R.error();
        }
        return userService.register(phone, password);
    }

    /*
     *  1、更改密码：
     *      1.1：手机验证更改
     *      1.2：新老密码更改
     *  2、找回密码
     *  3、修改个人信息
     *  4、手机号换绑
     */

    /*
     *  更改密码
     */

    //手机验证更改密码
    @PostMapping("changePasswordForPhone/{phone}/{code}/{password}")
    public R changePasswordForPhone(@PathVariable String phone, @PathVariable String code, @PathVariable String password) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code) || StringUtils.isEmpty(password)) {
            return R.error();
        }
        if (userService.changePasswordForPhone(phone, code, password)) {
            return R.ok();
        } else {
            return R.error();
        }
    }

    //新老密码更改密码
    @PostMapping("changePassword/{phone}/{oldPassword}/{newPassword}")
    public R changePassword(@PathVariable String phone, @PathVariable String oldPassword, @PathVariable String newPassword) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(oldPassword) || StringUtils.isEmpty(newPassword)) {
            return R.error();
        }

        if (userService.changePassword(phone, oldPassword, newPassword)) {
            return R.ok();
        } else {
            return R.error();
        }

    }

    //找回密码
    @GetMapping("findPassword/{phone}/{code}")
    public R findPassword(@PathVariable String phone, @PathVariable String code) {
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
            return R.error();
        }

        return userService.findPassword(phone, code);

    }

    //修改个人信息
    @PostMapping("changeInfo")
    public R changeInfo(@RequestBody User user) {
        if (user == null) return R.error();
        if (userService.changeInfo(user)) {
            return R.ok();
        } else {
            return R.error();
        }
    }


    //手机号换绑
    @PostMapping("changePhone/{oldPhone}/{newPhone}/{password}")
    public R changePhone(@PathVariable String oldPhone, @PathVariable String newPhone, @PathVariable String password){
        if (StringUtils.isEmpty(oldPhone) || StringUtils.isEmpty(newPhone) || StringUtils.isEmpty(password)) {
            return R.error();
        }

        if (userService.changePhone(oldPhone, newPhone, password)) {
            return R.ok();
        } else {
            return R.error();
        }
    }


}

